import { ref, type Ref } from 'vue';

/**
 * 创建可重置的 reactive 表单对象
 * @param callBack 返回初始表单数据的函数
 * @returns 包含 formData 和 resetForm、updateForm 方法的对象
 */
export function useResetFormFun<T extends object>(callBack: () => T) {
  const formData: Ref<T> = ref(callBack()) as Ref<T>;

  /**
   * 重置表单到初始状态
   */
  const resetForm = () => {
    formData.value = callBack();
  };

  /**
   * 更新表单数据（合并新数据）
   * @param newData 要更新的部分表单数据
   */
  const updateForm = (newData: Partial<T>) => {
    formData.value = {
      ...formData.value,
      ...newData
    };
  };

  return {
    formData,
    resetForm,
    updateForm
  };
}